#pragma once

#include "FITKInterfaceCustomDataAPI.h"
#include "FITK_Kernel/FITKCore/FITKAbstractNDataObject.h"
#include "FITK_Kernel/FITKCore/FITKVarientParams.h"
#include "FITK_Kernel/FITKCore/FITKAbstractDataManager.hpp"

namespace Interface
{
	class FITKInterfaceCustomDataAPI FITKCDCfgCSetBase : public Core::FITKAbstractNDataObject, public Core::FITKVarientParams
    {
    public:
        explicit FITKCDCfgCSetBase() = default;
        virtual ~FITKCDCfgCSetBase() = default;

		// SET
		void setSound_Speed(double dVal);
		void setCFL(double dVal);
		void setBackground_Pressure(double dVal);
		void setInitial_dx(double dVal);
		void setSimulation_Time(double dVal);
		void setSave_Time_Steps(double dVal);
		void setMonitor_Time_Steps(double dVal);
		void setPrint_Steps(int nVal);
		void setMaximum_Particles(int nVal);
		void setSmoothed_Kernel_Function(int nVal);
		void setTime_Integration(int nVal);
		void setOutput_File_Type(int nVal);
		void setBound_Output(bool bVal);

		void setCompute_Force(int nVal);
		void setCompute_Rigid_Normalvector(bool bVal);
		void setDelete_Particles(bool bVal);
		void setRigid_Output(bool bVal);

		// GET
		double getSound_Speed();
		double getCFL();
		double getBackground_Pressure();
		double getInitial_dx();
		double getSimulation_Time();
		double getSave_Time_Steps();
		double getMonitor_Time_Steps();
		int getPrint_Steps();
		int getMaximum_Particles();
		int getSmoothed_Kernel_Function();
		int getTime_Integration();
		int getOutput_File_Type();
		bool getBound_Output();

		int getCompute_Force();
		bool getCompute_Rigid_Normalvector();
		bool getDelete_Particles();
		bool getRigid_Output();
	};


	class FITKInterfaceCustomDataAPI FITKCDCfgCSetBaseManager : public Core::FITKAbstractDataManager<FITKCDCfgCSetBase>
	{
	public:
		explicit FITKCDCfgCSetBaseManager() = default;
		virtual ~FITKCDCfgCSetBaseManager() = default;
	};
}

